﻿using Framework.CapaDeDatos.Proveedores;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Framework.CapaDeDatos.Proveedores.Persistencia;
using Framework.Modelo;
using System;
using Rhino.Mocks;
using Framework.CapaDeDatos.Excepciones;

namespace FrameworkTest.CapaDeDatosTest
{
    [TestClass()]
    public class ProveedorTest
    {
        private TestContext testContextInstance;

        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        [TestMethod()]
        public void ProveedorConstructorTestWithNull()
        {
            IPersistencia persistencia = null;
            Proveedor target = null;
            try
            {
                target = new Proveedor(persistencia);
                Assert.Fail(Framework.Mensajes.CapaDeDatosTest.ProveedorTest.ExcepcionParametroNuloExperada);
            }
            catch (Exception ex)
            {
                Assert.IsInstanceOfType(ex, typeof(ExceptionParametroNulo));
            }
        }

        [TestMethod()]
        public void ProveedorConstructorTestWithInstance()
        {
            IPersistencia persistencia = MockRepository.GenerateStrictMock<IPersistencia>();
            Proveedor target = new Proveedor(persistencia);
            Assert.IsNotNull(target);
            Assert.IsInstanceOfType(target, typeof(IProveedor));
        }

        //[TestMethod()]
        public void RecuperarTest()
        {
            Guid guid = new Guid();
            IPersistencia persistencia = MockRepository.GenerateStrictMock<IPersistencia>();
            //persistencia.Expect(s => s.Recuperar(guid)).Repeat.Once();
            Proveedor target = new Proveedor(persistencia); 
            IObjeto actual;
            actual = target.Recuperar(guid);
            Assert.IsInstanceOfType(actual, typeof(IObjeto));
        }

        //[TestMethod()]
        public void GuardarTest()
        {
            IObjeto objeto = MockRepository.GenerateStrictMock<IObjeto>();
            IPersistencia persistencia = MockRepository.GenerateStrictMock<IPersistencia>();
            //persistencia.Expect(s => s.Guardar(objeto)).Repeat.Once();
            Proveedor target = new Proveedor(persistencia); 
            IObjeto actual;
            actual = target.Guardar(objeto);
            Assert.IsInstanceOfType(actual, typeof(IObjeto));
        }
    }
}
